package presentacion;

import javax.swing.JPanel;
import java.awt.GridBagLayout;
import javax.swing.JRadioButton;
import java.awt.GridBagConstraints;
import javax.swing.JCheckBox;
import javax.swing.JButton;
import javax.swing.JScrollPane;

import java.awt.Insets;
import java.util.ArrayList;

import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.ImageIcon;

import negocio.TransferGeneral;
import javax.swing.AbstractAction;
import java.awt.event.ActionEvent;
import javax.swing.Action;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PanelCorreo extends JPanel {
	private JTable table;
	private JTable table_1;
	private int dniUsuario;

	
	private ArrayList<Integer> idCorreoEntrante;
	private ArrayList<Integer> idCorreoSaliente;
	
	JCheckBox chckbxMostrarSoloNo;
	private final Action action = new SwingAction();

	/**
	 * Create the panel.
	 */
	public PanelCorreo(int dniUs) {
		
		
		this.dniUsuario=dniUs;
		
		GridBagLayout gridBagLayout = new GridBagLayout();
	
		gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 1.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		chckbxMostrarSoloNo = new JCheckBox("Mostrar solo no leidos");
		chckbxMostrarSoloNo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				actualizar(chckbxMostrarSoloNo.isSelected());
			}
		});
		GridBagConstraints gbc_chckbxMostrarSoloNo = new GridBagConstraints();
		gbc_chckbxMostrarSoloNo.gridwidth = 2;
		gbc_chckbxMostrarSoloNo.fill = GridBagConstraints.HORIZONTAL;
		gbc_chckbxMostrarSoloNo.insets = new Insets(0, 0, 5, 5);
		gbc_chckbxMostrarSoloNo.gridx = 0;
		gbc_chckbxMostrarSoloNo.gridy = 0;
		add(chckbxMostrarSoloNo, gbc_chckbxMostrarSoloNo);
		
		JButton btnNewButton = new JButton("");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				new GUIGeneralNuevoCorreo(dniUsuario).setVisible(true);
				actualizar(chckbxMostrarSoloNo.isSelected());
			}
		});
		btnNewButton.setIcon(new ImageIcon(PanelCorreo.class.getResource("/imagesPath/modif_tarea.png")));
		GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
		gbc_btnNewButton.fill = GridBagConstraints.HORIZONTAL;
		gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
		gbc_btnNewButton.gridx = 0;
		gbc_btnNewButton.gridy = 1;
		add(btnNewButton, gbc_btnNewButton);
		
		JButton btnRefrescar = new JButton("");
		btnRefrescar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				actualizar(chckbxMostrarSoloNo.isSelected());
			}
		});
		btnRefrescar.setIcon(new ImageIcon(PanelCorreo.class.getResource("/imagesPath/actualizar.png")));
		GridBagConstraints gbc_btnRefrescar = new GridBagConstraints();
		gbc_btnRefrescar.insets = new Insets(0, 0, 5, 5);
		gbc_btnRefrescar.gridx = 1;
		gbc_btnRefrescar.gridy = 1;
		add(btnRefrescar, gbc_btnRefrescar);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
		gbc_tabbedPane.gridwidth = 4;
		gbc_tabbedPane.fill = GridBagConstraints.BOTH;
		gbc_tabbedPane.gridx = 0;
		gbc_tabbedPane.gridy = 2;
		add(tabbedPane, gbc_tabbedPane);
		
		table = new JTable();
		table.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent arg0) {
				if(table.getSelectedRow()!=-1){
					new GUIGeneralLeerCorreo( idCorreoEntrante.get(table.getSelectedRow()),true).setVisible(true);
					
					
					TransferGeneral datos=new TransferGeneral();

					datos.setIdCorreoLeer(idCorreoEntrante.get(table.getSelectedRow()));
					SingletonControlador.getInstancia().evento(Evento.GENERAL_MARCAR_LEIDO_CORREO, datos);

					
					actualizar(chckbxMostrarSoloNo.isSelected());
				}
			}
		});
		table.setModel(new DefaultTableModel(
			new Object[][] {
				{"", null, null},
			},
			new String[] {
				"De", "Asunto", "Fecha"
			}
		));
		table.getColumnModel().getColumn(2).setPreferredWidth(55);
		table.getColumnModel().getColumn(2).setMaxWidth(55);
		tabbedPane.addTab("Recibidos", null,new JScrollPane( table), null);
		
		table_1 = new JTable();
		
		table_1.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent arg0) {
				if(table_1.getSelectedRow()!=-1){
					new GUIGeneralLeerCorreo( idCorreoSaliente.get(table_1.getSelectedRow()),false).setVisible(true);
				}
			}
		});
		
		
		
		table_1.setModel(new DefaultTableModel(
			new Object[][] {
				{null, null, null},
			},
			new String[] {
				"Para", "Asunto", "Fecha"
			}
		));
		table_1.getColumnModel().getColumn(2).setPreferredWidth(55);
		table_1.getColumnModel().getColumn(2).setMaxWidth(55);
		tabbedPane.addTab("Enviados", null, new JScrollPane(table_1), null);
		
		
		
			actualizar(chckbxMostrarSoloNo.isSelected());

	}
	
	
	
	private void actualizar(boolean soloNoLeidos){
		

		
		TransferGeneral datos=new TransferGeneral();
		datos.setDniUsuario(dniUsuario);
		SingletonControlador.getInstancia().evento(Evento.GENERAL_ACTUALIZAR_CORREOS, datos);
		idCorreoEntrante=new ArrayList<Integer>();
		
		int numCorreos=0;
		
		for (int i=0;i<datos.getCorreoEntranteUsuarioNombre().size();i++){
			if ((soloNoLeidos&&datos.getCorreoEntranteLeido().get(i)==0) || !soloNoLeidos){
				numCorreos++;
			}
		}
		
		
		
		
		Object[][] arrEntrante=new Object[numCorreos][3];
		int indCorreos=0;
		for (int i=0;i<datos.getCorreoEntranteUsuarioNombre().size();i++){
			if ((soloNoLeidos&&datos.getCorreoEntranteLeido().get(i)==0) || !soloNoLeidos){
				//sin checkbox ni marcar como leido.
				idCorreoEntrante.add(datos.getCorreoEntranteId().get(i));
				
				arrEntrante[indCorreos][0]=datos.getCorreoEntranteUsuarioNombre().get(i)+" "+datos.getCorreoEntranteUsuarioApellido1().get(i)+" "+datos.getCorreoEntranteUsuarioApellido2().get(i);
				arrEntrante[indCorreos][1]=datos.getCorreoEntranteAsunto().get(i);
				arrEntrante[indCorreos][2]=datos.getCorreoEntranteFecha().get(i);
				indCorreos++;
			}
		}
		table.setModel(new DefaultTableModel(
			arrEntrante,
			new String[] {
				"De", "Asunto", "Fecha"
			}
		){
			@Override
			public boolean isCellEditable(int row, int column) {
				return false;
			}
			});

		table.getColumnModel().getColumn(2).setPreferredWidth(55);
		table.getColumnModel().getColumn(2).setMaxWidth(55);
		

		
		idCorreoSaliente=datos.getCorreoSalienteId();
		
		Object[][] arrSaliente=new Object[datos.getCorreoSalienteUsuarioNombre().size()][3];
		for (int i=0;i<datos.getCorreoSalienteUsuarioNombre().size();i++){
		
			arrSaliente[i][0]=datos.getCorreoSalienteUsuarioNombre().get(i)+" "+datos.getCorreoSalienteUsuarioApellido1().get(i)+" "+datos.getCorreoSalienteUsuarioApellido2().get(i);
			arrSaliente[i][1]=datos.getCorreoSalienteAsunto().get(i);
			arrSaliente[i][2]=datos.getCorreoSalienteFecha().get(i);
		}
		table_1.setModel(new DefaultTableModel(
				arrSaliente,
				new String[] {
					"Para", "Asunto", "Fecha"
				}
			){
			@Override
			public boolean isCellEditable(int row, int column) {
				return false;
			}
			});
		table_1.getColumnModel().getColumn(2).setPreferredWidth(55);
		table_1.getColumnModel().getColumn(2).setMaxWidth(55);
		
	}
	
	
	
	

	private class SwingAction extends AbstractAction {
		public SwingAction() {
			putValue(NAME, "SwingAction");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
		}
	}
}
